{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=!pip list\n",
    "for item in a:\n",
    "    if \"maplotlib\" in item:\n",
    "        print(item)\n",
    "\n",
    "for item in a:\n",
    "    if \"numpy\" in item:\n",
    "        print(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x206fff45310>,\n",
       " <matplotlib.lines.Line2D at 0x206fff45450>]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,4*np.pi)\n",
    "plt.plot(x,np.sin(2*x+np.pi/2),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'graphviz'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[13], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mgraphviz\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgraphviz\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Digraph\n\u001b[0;32m      3\u001b[0m dot \u001b[38;5;241m=\u001b[39m Digraph()\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'graphviz'"
     ]
    }
   ],
   "source": [
    "import graphviz\n",
    "from graphviz import Digraph\n",
    "dot = Digraph()\n",
    "dot.node(\"1\",\"start\")\n",
    "dot.node(\"2\",\"input>=x\")\n",
    "dot.node(\"3\",\"If x>0\")\n",
    "dot.node(\"4\",\"plot sinx and cosx\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'graphviz'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[4], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mgraphviz\u001b[39;00m\n\u001b[0;32m      2\u001b[0m dot\u001b[38;5;241m=\u001b[39mgraphviz\u001b[38;5;241m.\u001b[39mDigraph(comment\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mthe round table\u001b[39m\u001b[38;5;124m'\u001b[39m,name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m顺序结构\u001b[39m\u001b[38;5;124m\"\u001b[39m,node_attr\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshape\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbox\u001b[39m\u001b[38;5;124m'\u001b[39m})\n\u001b[0;32m      3\u001b[0m dot\u001b[38;5;241m.\u001b[39mnode(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m1\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mStart\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'graphviz'"
     ]
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot.render('grade_judgment', format='pdf', view=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//img//jqm1.jpg\" width=\"150 \" alt=\"机器猫\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                                          $$$$$$            a$$$$                             \n",
      "                                                       <$$$8wwm$$$$   $$$$$$$$$$$$$                           \n",
      "                                                      $$$qwwwwwwww$$$$$t          $$                          \n",
      "                       @$$$$$$$$$$$k          b$$$$$$$$Bwwwwwwwwwwq8$$            $$$                         \n",
      "                      $$$        .$$$$$$$$$$$$$$$$) $$@wwwwwqqm$$@ww@$$'           $$                         \n",
      "                     $$$               Q            $$qwwwwww$$wwm$$$$$$$$$$$$$$$$$$$$$                       \n",
      "                     $$$                           $$$wwwwwww$$w%$$qwwwwwww$$$wwwwwwww$$$                     \n",
      "                     $$                            '$$wwwwwwww$$$$wwwwwwwwww$$Bqwwwwwwq$$                     \n",
      "                     $$$                            @$$qwwwwwqww$$qwwwwwwwwZ$$8$$wwwwww$$)                    \n",
      "                     $$$                             .$$$$$$$$$$$$$mwqwwwq%$$wp$$wwwww%$$                     \n",
      "                      $$$$$                                       h$$$$$$$$k$$@wqwwww@$$                      \n",
      "                      ?$$d                                              $$$qwwwwwww@$$$$                      \n",
      "                      $$Q                                                .$$$$BB$$$$_ $$$                     \n",
      "                     $$$                                                     f$$`      $$$                    \n",
      "                    $$$                                                                m$$                    \n",
      "                    $$$                                                             $$$$$$$$$$$$$$            \n",
      "                    $$                                                                  $${                   \n",
      "                    $$,                                                $$$$             $$.                   \n",
      "                 M$$$$$$$$$O        ~$$$.                             /$$$$\\         $$$$$$z                  \n",
      "            '$$$$'  $$$             $$$$$                              $$$$            $$$:'m$$$              \n",
      "                     $$$            $$$$;             $$$$$                           $$$                     \n",
      "                      $$$$$$.                       '$><>>i$#                      $$$$$                      \n",
      "                  $$$$$$$$                           %$$$$$h                       .$$$$$$$@                  \n",
      "                        $$$i    .                                             .$$$$$$$$$$  @$$$               \n",
      "                          $$$$$$                                             1$$     $8@@$$$$                 \n",
      "                        $$$$$$$$$                                          .$$$$           $$$.               \n",
      "                     $$$&      <$$$$$$$                             .B$$$$$$$$$$$           $$$               \n",
      "                                 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@      $$$          $$$               \n",
      "                             $$$$$$   $$$wqwww$$                $$wwwww$$$.     .$$$       ;$$                \n",
      "                          $$$$      .$$$wqwwwww$$.             $$wwwwwwwM$$       $$$.   .$$$                 \n",
      "                       .$$$$$d     '$$Zwwwwwwwwwo$$$l      '$$$8qwwwwwwwwm$$$       $$$$$$$                   \n",
      "                      $$$   $$$$  .$$Zwwwwwwwwwwwwqw%$$$$$$Bqwwwwwwwwwwwwww$$$     .$$$$$                     \n",
      "                     $$%       $$$$$wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww$$%,$$$$$                         \n",
      "                    $$)          $$@wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwZ$$$$                             \n",
      "                    $$          $$$wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww$$$                              \n",
      "                    @$$         $$wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww$$a                             \n",
      "                      $$$$.   '$$$wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwq@$$                             \n",
      "                         $$$$$$$$@wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwm$$                             \n",
      "                               $$mwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww$$                             \n",
      "                               $$mwwwwwwwwwwwwwwwwwwwwwM$wwwwwwwwwwwwwwwwwwwwww$$                             \n",
      "                               $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.                            \n",
      "                               $$X                     $$?                     $$                             \n",
      "                               $$@                     $$}                     $$                             \n",
      "                                $$                     $$\\                    $$$                             \n",
      "                                -$$$                  ^$$$                  `$$$                              \n",
      "                                  $$$$$$u .     ...$$$$$$$$$$f        .$$$$$$$                                \n",
      "                                      x$$$$$$$$$$$$$$       $$$$$$$$$$$$$                                     \n",
      "                                                                                                              \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\14170\\AppData\\Local\\Temp\\ipykernel_13608\\1625733783.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"1.png.webp\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
